home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 2 / Gold Medal Software Volume 2 (Gold Medal) (1994).iso / prog / adlip.arj / CMICRO.MAC < prev    next >
Text File  |  1987-11-27  |  3KB  |  178 lines

  1.     .XLIST
  2.     PAGE    58,132
  3.  
  4. ; File that supports LATTICE macros But generates Microsoft C 
  5. ; segments or variables memX variable is declared in version.inc
  6.  
  7.  
  8.  
  9.     IFDEF    memS
  10. LDATA    EQU    0
  11. LPROG    EQU    0
  12.     ENDIF
  13.     IFDEF    memM
  14. LDATA    EQU    0
  15. LPROG    EQU    1
  16.     ENDIF
  17.     IFDEF    memC
  18. LDATA    EQU    1
  19. LPROG    EQU    0
  20.     ENDIF
  21.     IFDEF    memL
  22. LDATA    EQU    1
  23. LPROG    EQU    1
  24.     ENDIF
  25.     IFDEF    memH
  26. LDATA    EQU    1
  27. LPROG    EQU    1
  28.     ENDIF
  29.  
  30.  
  31. ;**
  32. ;
  33. ; The following symbols are established via LPROG and LDATA as follows:
  34. ;
  35. ;    S8086    set for small model (small prog, small data)
  36. ;    D8086    set for model with large data, small prog
  37. ;    P8086    set for model with large prog, small data
  38. ;    L8086    set for large model
  39. ;
  40. ;**
  41.     IF    (LPROG EQ 0) AND (LDATA EQ 0)
  42. S8086    EQU    1
  43. D8086    EQU     0
  44. P8086    EQU    0
  45. L8086    EQU    0
  46.     ENDIF
  47.  
  48.     IF    (LPROG EQ 0) AND (LDATA NE 0)
  49. S8086    EQU    0
  50. D8086    EQU    1
  51. P8086    EQU    0
  52. L8086    EQU    0
  53.     ENDIF
  54.  
  55.     IF    (LPROG NE 0) AND (LDATA EQ 0)
  56. S8086    EQU    0
  57. D8086    EQU    0
  58. P8086    EQU    1
  59. L8086    EQU    0
  60.     ENDIF
  61.  
  62.     IF    (LPROG NE 0) AND (LDATA NE 0)
  63. S8086    EQU    0
  64. D8086    EQU    0
  65. P8086    EQU    0
  66. L8086    EQU    1
  67.     ENDIF
  68.  
  69.  
  70. ;**
  71. ;
  72. ; The DSEG and PSEG macros are defined to generate the appropriate GROUP
  73. ; and SEGMENT statements for the memory model being used.  The ENDDS and
  74. ; ENDPS macros are then used to end the segments.
  75. ;
  76. ;**
  77.  
  78. DSEG    MACRO    
  79. DGROUP    GROUP    _DATA
  80. _DATA    SEGMENT    WORD PUBLIC 'DATA'
  81.     ASSUME    DS:DGROUP, SS:DGROUP
  82.     ENDM
  83. ENDDS    MACRO
  84. _DATA    ENDS
  85.     ENDM
  86.  
  87.  
  88. PSEG    MACRO    modname
  89.  
  90.     IF    LPROG
  91. modname&_TEXT    SEGMENT    WORD PUBLIC 'CODE'
  92.     ASSUME  CS:modname&_TEXT
  93.     ELSE
  94. _TEXT    SEGMENT    WORD PUBLIC 'CODE'
  95.     ASSUME    CS:_TEXT
  96.     ENDIF
  97.     ENDM
  98.  
  99. ENDPS    MACRO    modname
  100.     IF    LPROG
  101. modname&_TEXT    ENDS
  102.     ELSE
  103. _TEXT    ENDS
  104.     ENDIF
  105.     ENDM
  106.  
  107.  
  108. ;**
  109. ;
  110. ; The BEGIN and ENTRY macros establish appropriate function entry points
  111. ; depending on whether NEAR or FAR program addressing is being used.  The
  112. ; only difference between the two is that BEGIN generates a PROC operation
  113. ; to start a segment. 
  114. ;
  115. BEGIN    MACRO    NAME            ; begin a function
  116.     PUBLIC  NAME
  117.     IF    LPROG
  118. NAME    PROC    FAR
  119.     ELSE
  120. NAME    PROC    NEAR
  121.     ENDIF
  122.     ENDM
  123.  
  124. ENTRY    MACRO    NAME
  125.     PUBLIC    NAME
  126.     IF    LPROG
  127. NAME    LABEL    FAR
  128.     ELSE
  129. NAME    LABEL    NEAR
  130.     ENDIF
  131.     ENDM
  132.  
  133. ;**
  134. ;
  135. ; The following symbols are defined to help set up a STRUC defining the
  136. ; stack frame:
  137. ;
  138. ;    CPSIZE -> code pointer size (2 or 4)
  139. ;    DPSIZE -> data pointer size (2 or 4)
  140. ;
  141. ; These wouldn't be necessary if it were possible to use macros or even
  142. ; conditionals within a STRUC.
  143. ;
  144.     IF    LPROG
  145. CPSIZE    EQU    4
  146.     ELSE
  147. CPSIZE    EQU    2
  148.     ENDIF
  149.     IF    LDATA
  150. DPSIZE    EQU    4
  151.     ELSE
  152. DPSIZE    EQU    2
  153.     ENDIF
  154.  
  155.  
  156. penter    MACRO    dyns            ; used when we enter a procedure
  157.     push    BP            ; save context register
  158.     IF    dyns NE 0
  159.     sub    SP, dyns        ; local variables on stack
  160.     ENDIF
  161.     mov    BP, SP            ;
  162.     push    DI            ; for register variables (MICROSOFT 'C' 3.0)
  163.     push    SI            ;
  164.     ENDM                ;
  165.  
  166. pleave    MACRO    dyns            ; used when we leave a procedure
  167.     pop    SI            ;
  168.     pop    DI            ;
  169.     IF    dyns NE 0
  170.     add    SP, dyns        ;
  171.     ENDIF
  172.     pop    BP            ;
  173.     ret                ;
  174.     ENDM                ;
  175.  
  176.  
  177.     .LIST
  178.